

# 协程是一种用户态的轻量级线程
# 协程的好处:
#       无需线程上下文切换的开销
#       无需原子操作锁定及同步的开销
#       方便切换控制流,简化编程模型
#       高并发+高扩展性+低成本: 一个CPU支持上万的协程都不是问题,所以很适合用于高并发处理.

# 缺点:
#   无法利用多核资源: 协程的本质是个单线程,它不能同时将单个CPU的多个核用上,协程需要和进程配
#       合才能运行在多CPU上.当然我们日常所编写的绝大部分应用都没有这个必要,除非是CPU密集型应用.
#
#   进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序
#

# 这个例子是用 yield 实现协程操作的例子

import time
import queue


def consumer(name):
    print("---->starting eating baozi...")
    while True:
        new_baozi = yield
        print("[%s] is eating baozi %s" % (name,new_baozi))
        # time.sleep(1)


def producer():

    r = con.__next__()
    r = con2.__next__()
    n = 0
    while n < 5:
        n += 1
        con.send(n)
        con2.send(n)
        print('\033[32;1m[producer]\033[0m is making baozi %s' %n )


if __name__ == '__main__':
    con = consumer('c1')
    con2 = consumer('c2')
    p = producer()
